package com.classroommanagesystem.utils;

import org.mindrot.jbcrypt.BCrypt;

import java.util.Objects;

public class PasswordUtils {
    // BCrypt加密算法的默认工作因子
    private static final int BCRYPT_WORK_FACTOR = 12;

    /**
     * 对原始密码进行BCrypt加密（自动生成盐值并嵌入结果）
     *
     * @param password 原始明文密码
     * @return 加密后的哈希字符串（包含盐值和算法信息）
     */
    public static String getHashPassord(String password) {
        Objects.requireNonNull(password, "密码不能为空");
        // gensalt生成包含盐值的字符串，hashpw自动使用该盐值加密
        return BCrypt.hashpw(password, BCrypt.gensalt(BCRYPT_WORK_FACTOR));
    }


    /**
     * 验证原始密码与加密后的哈希是否匹配
     *
     * @param hashPassword 加密后的哈希字符串（从数据库获取)
     * @param password  原始明文密码
     * @return 匹配结果（true=匹配，false=不匹配）
     */
    public static boolean isPassword(String hashPassword,String password) {
        Objects.requireNonNull(password, "原始密码不能为空");
        Objects.requireNonNull(hashPassword, "哈希密码不能为空");
        // checkpw自动从hashedPassword中提取盐值，与plainPassword重新加密比对
        return BCrypt.checkpw(password, hashPassword);
    }
}